package com.yueqian.sc.web.servlet;

import com.google.gson.Gson;
import com.mysql.jdbc.StringUtils;
import com.yueqian.sc.bean.Course;
import com.yueqian.sc.bean.CourseVo;
import com.yueqian.sc.bean.PageBean;
import com.yueqian.sc.bean.Users;
import com.yueqian.sc.dao.ICourseDao;
import com.yueqian.sc.dao.impl.CourseDao;
import com.yueqian.sc.utils.StringTools;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 课程对应的服务端接口
 */
@WebServlet("/course/*")
public class CourseServlet extends BaseServlet{
    private ICourseDao courseDao = new CourseDao();

    /**
     * 查询所有课程（支持模糊查询，支持分页查询）
     * 请求的URL：/SelectCourse2/course/queryAll?keywords=关键字&currentPage=1
     * 请求的方式：POST
     *
     * @param request
     * @param response
     * @throws IOException
     */
    public void queryAll(HttpServletRequest request,HttpServletResponse response) throws IOException{
        // 创建一个Map集合存放要返回到客户端的信息
        Map<String,Object> result = new HashMap<>();
        // 处理前后端编码
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        // 接收前端传过来的参数（keywords,currentPage）
        String keywords = request.getParameter("keywords");// 关键字
        if(StringUtils.isNullOrEmpty(keywords)){
            keywords="";
        }
        String currentPage = request.getParameter("currentPage");// 当前页
        if(StringUtils.isNullOrEmpty(currentPage)){
            currentPage = "1";// 没有设置当前页，就默认为第一页
        }
        // 声明每页显示的条数
        int pageSize = 5;
        // 获取课程总条目数
        int total = courseDao.courseCount(keywords);
        // 创建page，封装分页信息
        PageBean page = new PageBean(total,pageSize,Integer.parseInt(currentPage));
        // 访问dao，查询分页数据
        List<CourseVo> list = courseDao.queryAll(keywords,page.getStartIndex(),pageSize);
        // 封装响应数据
        if(list!=null){
            result.put("code",1);
            result.put("msg","课程信息获取成功！");
            result.put("page",page);
            result.put("result",list);
        }else{
            result.put("code",0);
            result.put("msg","课程信息获取失败！");
        }
        // 将信息响应到前端
        response.getWriter().write(new Gson().toJson(result));


    }
    /**
     * 添加学生
     * 请求的URL：/SelectCourse2/course/add
     * 请求的方式：POST
     * 请求的类型：表单
     * 返回的类型：JSON
     *
     * @param request
     * @param response
     */
    public void add(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 创建一个Map集合存放要返回到客户端的信息
        Map<String, Object> result = new HashMap<>();
        // 1. 处理前后端的编码
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        // 2. 获取前端表单提交的数据
        String courseName = request.getParameter("courseName");
        String coursePic = request.getParameter("coursePic");
        String teacherId = request.getParameter("teacherId");
        String textbook = request.getParameter("textbook");
        String credit = request.getParameter("credit");
        String classHours = request.getParameter("classHours");
        // 3. 非空校验
        if (StringUtils.isNullOrEmpty(courseName) || StringUtils.isNullOrEmpty(teacherId) ||
                StringUtils.isNullOrEmpty(textbook) || StringUtils.isNullOrEmpty(credit) || StringUtils.isNullOrEmpty(classHours)) {
            result.put("code", -1);
            result.put("msg", "您的输入项不能为空！");
        } else {
            // 4. 访问数据库
            // 创建需要保存到数据库的数据
            Course course = new Course(courseName,coursePic,Integer.parseInt(teacherId),textbook,Integer.parseInt(credit),Integer.parseInt(classHours));
            // 调用保存的方法
            if (courseDao.addCourse(course)) {
                System.out.println("课程添加成功！");
                result.put("code", 1);
                result.put("msg", "课程添加成功！");

            } else {
                System.out.println("课程添加失败！");
                result.put("code", 0);
                result.put("msg", "课程添加失败！");

            }
        }
        // 5. 将结果响应到前端
        response.getWriter().write(new Gson().toJson(result));
    }
    /**
     * 根据编号修改课程信息
     * 请求的URL：/SelectCourse2/course/update
     * 请求的方式：POST
     * 请求的类型：表单
     * 返回的类型：JSON
     *
     * @param request
     * @param response
     * @throws IOException
     */
    public void update(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 创建一个Map，用来管理响应信息
        Map<String, Object> result = new HashMap<>();
        // 对前后端交互进行编码处理
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        // 接收前端表单传递的信息(前端提交过来的数据都是字符串类型)
        String courseId = request.getParameter("courseId");// 编号
        String courseName = request.getParameter("courseName");// 课程名称
        String coursePic = request.getParameter("coursePic");// 课程图片
        String textbook = request.getParameter("textbook");// 配套教材
        String teacherId = request.getParameter("teacherId");// 授课课程
        String credit = request.getParameter("credit");// 学分
        String classHours = request.getParameter("classHours");// 学时
        // 非空校验
        if (StringUtils.isNullOrEmpty(courseId) || StringUtils.isNullOrEmpty(teacherId) ||
                StringUtils.isNullOrEmpty(courseName) || StringUtils.isNullOrEmpty(textbook) ||
                StringUtils.isNullOrEmpty(credit) || StringUtils.isNullOrEmpty(classHours)) {
            result.put("code", -1);
            result.put("msg", "您的提交数据不能为空！");
        } else {
            // 4. 访问数据库
            // 创建需要保存到数据库的数据
            Course course = new Course(Integer.parseInt(courseId),coursePic,courseName,Integer.parseInt(teacherId),textbook,Integer.parseInt(credit),Integer.parseInt(classHours));
            // 调用保存的方法
            if (courseDao.updateCourse(course)) {
                result.put("code", 1);
                result.put("msg", "课程修改成功！");
            } else {
                result.put("code", 0);
                result.put("msg", "课程修改失败！");

            }
        }
        // 将数据响应到前端
        response.getWriter().write(new Gson().toJson(result));
    }

    /**
     * 根据编号删除课程信息
     * 请求的URL：/SelectCourse2/course/delete?courseId=动态编号
     * 请求的方式：GET
     * 请求的类型：none
     * 返回的类型：JSON
     *
     * @param request
     * @param response
     * @throws IOException
     */
    public void delete(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 创建一个map,管理响应信息
        Map<String, Object> result = new HashMap<>();
        // 处理前后端编码
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        // 获取前端传递的course
        String courseId = request.getParameter("courseId");
        // 非空校验
        if (StringUtils.isNullOrEmpty(courseId)) {
            courseId = "0";
        }
        // 访问数据库
        if (courseDao.deleteCourse(Integer.parseInt(courseId))) {
            result.put("code", 1);
            result.put("msg", "课程删除成功！");
        } else {
            result.put("code", 0);
            result.put("msg", "课程删除失败！");
        }
        // 将数据响应到前端
        response.getWriter().write(new Gson().toJson(result));

    }
    /**
     * 查询所有未选课程（支持模糊查询，支持分页查询）
     * 请求的URL：/SelectCourse2/course/queryUnSelectedAll?keywords=关键字&currentPage=1
     * 请求的方式：POST
     *
     * @param request
     * @param response
     * @throws IOException
     */
    public void queryUnSelectedAll(HttpServletRequest request,HttpServletResponse response) throws IOException{
        // 创建一个Map集合存放要返回到客户端的信息
        Map<String,Object> result = new HashMap<>();
        // 处理前后端编码
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        // 接收前端传过来的参数（keywords,currentPage）
        String keywords = request.getParameter("keywords");// 关键字
        if(StringUtils.isNullOrEmpty(keywords)){
            keywords="";
        }
        String currentPage = request.getParameter("currentPage");// 当前页
        if(StringUtils.isNullOrEmpty(currentPage)){
            currentPage = "1";// 没有设置当前页，就默认为第一页
        }
        // 声明每页显示的条数
        int pageSize = 5;
        // 获取登录保存的用户编号
        Users student = (Users) request.getSession().getAttribute("user");
        int studentId = 0;
        if(student!=null){
            studentId = student.getUserId();
        }
        // 获取课程总条目数
        int total = courseDao.unSelectedcCourseCount(studentId,keywords);
        // 创建page，封装分页信息
        PageBean page = new PageBean(total,pageSize,Integer.parseInt(currentPage));
        // 访问dao，查询分页数据
        List<CourseVo> list = courseDao.queryUnSelectedAll(studentId,keywords,page.getStartIndex(),pageSize);
        // 封装响应数据
        if(list!=null){
            result.put("code",1);
            result.put("msg","课程信息获取成功！");
            result.put("page",page);
            result.put("result",list);
        }else{
            result.put("code",0);
            result.put("msg","课程信息获取失败！");
        }
        // 将信息响应到前端
        response.getWriter().write(new Gson().toJson(result));


    }
    /**
     * 查询所有未选课程（支持模糊查询，支持分页查询）
     * 请求的URL：/SelectCourse2/course/querySelectedAll?keywords=关键字&currentPage=1
     * 请求的方式：POST
     *
     * @param request
     * @param response
     * @throws IOException
     */
    public void querySelectedAll(HttpServletRequest request,HttpServletResponse response) throws IOException{
        // 创建一个Map集合存放要返回到客户端的信息
        Map<String,Object> result = new HashMap<>();
        // 处理前后端编码
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        // 接收前端传过来的参数（keywords,currentPage）
        String keywords = request.getParameter("keywords");// 关键字
        if(StringUtils.isNullOrEmpty(keywords)){
            keywords="";
        }
        String currentPage = request.getParameter("currentPage");// 当前页
        if(StringUtils.isNullOrEmpty(currentPage)){
            currentPage = "1";// 没有设置当前页，就默认为第一页
        }
        // 声明每页显示的条数
        int pageSize = 5;
        // 获取登录保存的用户编号
        Users student = (Users) request.getSession().getAttribute("user");
        int studentId = 0;
        if(student!=null){
            studentId = student.getUserId();
        }
        // 获取课程总条目数
        int total = courseDao.selectCourseCount(studentId,keywords);
        // 创建page，封装分页信息
        PageBean page = new PageBean(total,pageSize,Integer.parseInt(currentPage));
        // 访问dao，查询分页数据
        List<CourseVo> list = courseDao.querySelectedAll(studentId,keywords,page.getStartIndex(),pageSize);
        // 封装响应数据
        if(list!=null){
            result.put("code",1);
            result.put("msg","课程信息获取成功！");
            result.put("page",page);
            result.put("result",list);
        }else{
            result.put("code",0);
            result.put("msg","课程信息获取失败！");
        }
        // 将信息响应到前端
        response.getWriter().write(new Gson().toJson(result));


    }
}
